From e7b773b03122ac2e36a90bf836f5940e051e68e9 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Mon, 6 Jul 2020 11:03:02 -0400 Subject: [PATCH] filechooser: Add a readonly :shortcut-folders property This makes the shortcut folders list accessible in the the inspector. --- gtk/gtkfilechooser.c | 16 ++++++++++++++++ gtk/gtkfilechooserbutton.c | 1 + gtk/gtkfilechooserutils.c | 3 +++ gtk/gtkfilechooserutils.h | 3 ++- gtk/gtkfilechooserwidget.c | 10 ++++++++++ 5 files changed, 32 insertions(+), 1 deletion(-) diff --git a/gtk/gtkfilechooser.c b/gtk/gtkfilechooser.c index 0c42fb8f7b..b77652bd1c 100644 --- a/gtk/gtkfilechooser.c +++ b/gtk/gtkfilechooser.c @@ -184,6 +184,22 @@ gtk_file_chooser_default_init (GtkFileChooserInterface *iface) G_TYPE_LIST_MODEL, GTK_PARAM_READABLE)); + /** + * GtkFileChooser:shortcut-folders: + * + * A #GListModel containing the shortcut folders that have been + * added with gtk_file_chooser_add_shortcut(). + * + * The returned object should not be modified. It may + * or may not be updated for later changes. + */ + g_object_interface_install_property (iface, + g_param_spec_object ("shortcut-folders", + P_("Shortcut Folders"), + P_("List model of shortcut folders"), + G_TYPE_LIST_MODEL, + GTK_PARAM_READABLE)); + /** * GtkFileChooser:create-folders: * diff --git a/gtk/gtkfilechooserbutton.c b/gtk/gtkfilechooserbutton.c index b735699a75..97bd4eab90 100644 --- a/gtk/gtkfilechooserbutton.c +++ b/gtk/gtkfilechooserbutton.c @@ -1036,6 +1036,7 @@ gtk_file_chooser_button_get_property (GObject *object, case GTK_FILE_CHOOSER_PROP_SELECT_MULTIPLE: case GTK_FILE_CHOOSER_PROP_CREATE_FOLDERS: case GTK_FILE_CHOOSER_PROP_FILTERS: + case GTK_FILE_CHOOSER_PROP_SHORTCUT_FOLDERS: g_object_get_property (G_OBJECT (button->chooser), pspec->name, value); break; diff --git a/gtk/gtkfilechooserutils.c b/gtk/gtkfilechooserutils.c index e3fb636731..d41d9513cb 100644 --- a/gtk/gtkfilechooserutils.c +++ b/gtk/gtkfilechooserutils.c @@ -106,6 +106,9 @@ _gtk_file_chooser_install_properties (GObjectClass *klass) g_object_class_override_property (klass, GTK_FILE_CHOOSER_PROP_FILTERS, "filters"); + g_object_class_override_property (klass, + GTK_FILE_CHOOSER_PROP_SHORTCUT_FOLDERS, + "shortcut-folders"); } /** diff --git a/gtk/gtkfilechooserutils.h b/gtk/gtkfilechooserutils.h index 5c5494a0ce..3ca736c996 100644 --- a/gtk/gtkfilechooserutils.h +++ b/gtk/gtkfilechooserutils.h @@ -33,7 +33,8 @@ typedef enum { GTK_FILE_CHOOSER_PROP_SELECT_MULTIPLE, GTK_FILE_CHOOSER_PROP_CREATE_FOLDERS, GTK_FILE_CHOOSER_PROP_FILTERS, - GTK_FILE_CHOOSER_PROP_LAST = GTK_FILE_CHOOSER_PROP_FILTERS + GTK_FILE_CHOOSER_PROP_SHORTCUT_FOLDERS, + GTK_FILE_CHOOSER_PROP_LAST = GTK_FILE_CHOOSER_PROP_SHORTCUT_FOLDERS } GtkFileChooserProp; void _gtk_file_chooser_install_properties (GObjectClass *klass); diff --git a/gtk/gtkfilechooserwidget.c b/gtk/gtkfilechooserwidget.c index e9fb6cbcab..3551463c23 100644 --- a/gtk/gtkfilechooserwidget.c +++ b/gtk/gtkfilechooserwidget.c @@ -3076,6 +3076,10 @@ gtk_file_chooser_widget_get_property (GObject *object, g_value_set_object (value, impl->filters); break; + case GTK_FILE_CHOOSER_PROP_SHORTCUT_FOLDERS: + g_value_take_object (value, gtk_file_chooser_get_shortcut_folders (GTK_FILE_CHOOSER (impl))); + break; + default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; @@ -5625,6 +5629,9 @@ gtk_file_chooser_widget_add_shortcut_folder (GtkFileChooser *chooser, GtkFileChooserWidget *impl = GTK_FILE_CHOOSER_WIDGET (chooser); gtk_places_sidebar_add_shortcut (GTK_PLACES_SIDEBAR (impl->places_sidebar), file); + + g_object_notify (G_OBJECT (chooser), "shortcut-folders"); + return TRUE; } @@ -5636,6 +5643,9 @@ gtk_file_chooser_widget_remove_shortcut_folder (GtkFileChooser *chooser, GtkFileChooserWidget *impl = GTK_FILE_CHOOSER_WIDGET (chooser); gtk_places_sidebar_remove_shortcut (GTK_PLACES_SIDEBAR (impl->places_sidebar), file); + + g_object_notify (G_OBJECT (chooser), "shortcut-folders"); + return TRUE; } -- 2.30.2